package min3d;

import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import min3d.core.Object3d;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class Utils {
	public static final float	DEG				= (float) (Math.PI / 180f);

	private static final int	BYTES_PER_FLOAT	= 4;

	/**
	 * Convenience method to create a Bitmap given a Context's drawable resource ID.
	 */
	public static Bitmap makeBitmapFromResourceId(Context $context, int $id) {
		InputStream is = $context.getResources().openRawResource($id);

		Bitmap bitmap;
		try
		{
			bitmap = BitmapFactory.decodeStream(is);
		}
		finally
		{
			try
			{
				is.close();
			}
			catch (IOException e)
			{
				// Ignore.
			}
		}
		return bitmap;
	}

	/**
	 * Convenience method to create a Bitmap given a drawable resource ID from the application Context.
	 */
	public static Bitmap makeBitmapFromResourceId(int $id) {
		return makeBitmapFromResourceId(Shared.context(), $id);
	}

	/**
	 * Add two triangles to the Object3d's faces using the supplied indices
	 */
	public static void addQuad(Object3d $o, int $upperLeft, int $upperRight, int $lowerRight, int $lowerLeft) {
		$o.faces().add((short) $upperLeft, (short) $lowerRight, (short) $upperRight);
		$o.faces().add((short) $upperLeft, (short) $lowerLeft, (short) $lowerRight);
	}

	public static FloatBuffer makeFloatBuffer3(float $a, float $b, float $c) {
		ByteBuffer b = ByteBuffer.allocateDirect(3 * BYTES_PER_FLOAT);
		b.order(ByteOrder.nativeOrder());
		FloatBuffer buffer = b.asFloatBuffer();
		buffer.put($a);
		buffer.put($b);
		buffer.put($c);
		buffer.position(0);
		return buffer;
	}

	public static FloatBuffer makeFloatBuffer4(float $a, float $b, float $c, float $d) {
		ByteBuffer b = ByteBuffer.allocateDirect(4 * BYTES_PER_FLOAT);
		b.order(ByteOrder.nativeOrder());
		FloatBuffer buffer = b.asFloatBuffer();
		buffer.put($a);
		buffer.put($b);
		buffer.put($c);
		buffer.put($d);
		buffer.position(0);
		return buffer;
	}
}
